<?php

namespace D3hdv\Diablo3Bundle\Entity;

use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;


/**
 * D3ObjetModele
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="D3hdv\Diablo3Bundle\Entity\D3ObjetModeleRepository")
 */
class D3ObjetModele
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="nom", type="string", length=255, unique = true)
     */
    private $nom;

    /**
     * @var string
     *
     * @ORM\Column(name="niveau", type="string", length=255)
     */
    private $niveau;

    /**
     * @var string
     *
     * @ORM\Column(name="image", type="string", length=255, nullable=true)
     */
    private $image;

    /**
     * @var string
     *
     * @ORM\Column(name="spe", type="string", length=255)
     */
    private $spe;

    /**
     * @ORM\ManyToOne(targetEntity="D3hdv\Diablo3Bundle\Entity\D3ObjetType")
     * @ORM\JoinColumn(nullable=false)
     */
    private $Type;

     /**
     * @ORM\ManyToOne(targetEntity="D3hdv\Diablo3Bundle\Entity\D3ObjetClasse")
     * @ORM\JoinColumn(nullable=false)
     */
    private $Classe;

      /**
     * @ORM\ManyToOne(targetEntity="D3hdv\Diablo3Bundle\Entity\D3ObjetRarete")
     * @ORM\JoinColumn(nullable=false)
     */
    private $Rarete;

     /**
     * @ORM\ManyToMany(targetEntity="D3hdv\Diablo3Bundle\Entity\D3ObjetCaracValeur", cascade={"persist"})
     */
    private $Caracteristiques;

     /**
     * @var string $file
     * @Assert\File(maxSize="6000000")
     */
    public $file;


    public function getWebPath()
    {
        return null === $this->image ? null : $this->getUploadDir().'/'.$this->image;
    }

    protected function getUploadRootDir()
    {
        // le chemin absolu du répertoire dans lequel sauvegarder les photos de profil
        //return __DIR__.'/../../../../web/'.$this->getUploadDir();
	return __DIR__.'/../Resources/'.$this->getUploadDir();
    }

    protected function getUploadDir()
    {
        // get rid of the __DIR__ so it doesn't screw when displaying uploaded doc/image in the view.
        //return 'bundles/d3hdvdiablo3/images/uploads/objetsmodele';
	return 'public/images/uploads/objetsmodele';
    }
    
    public function uploadProfilePicture()
    {
        // Nous utilisons le nom de fichier original, donc il est dans la pratique 
        // nécessaire de le nettoyer pour éviter les problèmes de sécurité
	if (null === $this->file) {
            return;
        }
        // move copie le fichier présent chez le client dans le répertoire indiqué.
        $this->file->move($this->getUploadRootDir(), $this->file->getClientOriginalName());

        // On sauvegarde le nom de fichier
        $this->image = $this->file->getClientOriginalName();
        
        // La propriété file ne servira plus
        $this->file = null;
    }
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set nom
     *
     * @param string $nom
     * @return D3ObjetModele
     */
    public function setNom($nom)
    {
        $this->nom = $nom;
    
        return $this;
    }

    /**
     * Get nom
     *
     * @return string 
     */
    public function getNom()
    {
        return $this->nom;
    }

    /**
     * Set niveau
     *
     * @param string $niveau
     * @return D3ObjetModele
     */
    public function setNiveau($niveau)
    {
        $this->niveau = $niveau;
    
        return $this;
    }

    /**
     * Get niveau
     *
     * @return string 
     */
    public function getNiveau()
    {
        return $this->niveau;
    }

    /**
     * Set image
     *
     * @param string $image
     * @return D3ObjetModele
     */
    public function setImage($image)
    {
        $this->image = $image;
    
        return $this;
    }

    /**
     * Get image
     *
     * @return string 
     */
    public function getImage()
    {
        return $this->image;
    }

    /**
     * Set spe
     *
     * @param string $spe
     * @return D3ObjetModele
     */
    public function setSpe($spe)
    {
        $this->spe = $spe;
    
        return $this;
    }

    /**
     * Get spe
     *
     * @return string 
     */
    public function getSpe()
    {
        return $this->spe;
    }
    /**
     * Constructor
     */
    public function __construct()
    {
        $this->Caracteristiques = new \Doctrine\Common\Collections\ArrayCollection();
    }
    
    /**
     * Set Type
     *
     * @param \D3hdv\Diablo3Bundle\Entity\D3ObjetType $type
     * @return D3ObjetModele
     */
    public function setType(\D3hdv\Diablo3Bundle\Entity\D3ObjetType $type)
    {
        $this->Type = $type;
    
        return $this;
    }

    /**
     * Get Type
     *
     * @return \D3hdv\Diablo3Bundle\Entity\D3ObjetType 
     */
    public function getType()
    {
        return $this->Type;
    }

    /**
     * Set Classe
     *
     * @param \D3hdv\Diablo3Bundle\Entity\D3ObjetClasse $classe
     * @return D3ObjetModele
     */
    public function setClasse(\D3hdv\Diablo3Bundle\Entity\D3ObjetClasse $classe)
    {
        $this->Classe = $classe;
    
        return $this;
    }

    /**
     * Get Classe
     *
     * @return \D3hdv\Diablo3Bundle\Entity\D3ObjetClasse 
     */
    public function getClasse()
    {
        return $this->Classe;
    }

    /**
     * Set Rarete
     *
     * @param \D3hdv\Diablo3Bundle\Entity\D3ObjetRarete $rarete
     * @return D3ObjetModele
     */
    public function setRarete(\D3hdv\Diablo3Bundle\Entity\D3ObjetRarete $rarete)
    {
        $this->Rarete = $rarete;
    
        return $this;
    }

    /**
     * Get Rarete
     *
     * @return \D3hdv\Diablo3Bundle\Entity\D3ObjetRarete 
     */
    public function getRarete()
    {
        return $this->Rarete;
    }

    /**
     * Add Caracteristiques
     *
     * @param \D3hdv\Diablo3Bundle\Entity\D3ObjetCarac $caracteristiques
     * @return D3ObjetModele
     */
    public function addCaracteristique(\D3hdv\Diablo3Bundle\Entity\D3ObjetCaracValeur $caracteristiques) //doute carac avant
    {
        $this->Caracteristiques[] = $caracteristiques;
    
        return $this;
    }

    /**
     * Remove Caracteristiques
     *
     * @param \D3hdv\Diablo3Bundle\Entity\D3ObjetCarac $caracteristiques
     */
    public function removeCaracteristique(\D3hdv\Diablo3Bundle\Entity\D3ObjetCaracValeur $caracteristiques) //doute carac avant
    {
        $this->Caracteristiques->removeElement($caracteristiques);
    }

    /**
     * Get Caracteristiques
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getCaracteristiques()
    {
        return $this->Caracteristiques;
    }
}
